> ## Documentation Index
> Fetch the complete documentation index at: https://sequence-0fb8d9e6-relayer_docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Unreal Currency Swaps

> Documentation for Unreal SDK overview for the Sequence infrastructure stack for web3 gaming.

Swapping between different ERC20/native token currencies on a given Chain is made easy by Sequence's Smart Swap API.

Please make sure that your token pair has enough liquidity on a supported exchange such as UniSwap.
Checkout this guide on [how to add liquidity on UniSwap.](https://support.uniswap.org/hc/en-us/articles/7423194619661-How-to-add-liquidity-to-Uniswap-v3)

## Get Swap Price

Query the swap price for a given token pair.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-relayer_docs/6udOBi1aBhs72bAQ/images/unreal/get_swap_price.png?fit=max&auto=format&n=6udOBi1aBhs72bAQ&q=85&s=9479ca9eab851d26712413b211f9ff07" width="2074" height="1104" data-path="images/unreal/get_swap_price.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapPrice> OnApiSuccess = [this, OnSuccess](const FSeqSwapPrice& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrice(SequenceSdk::GetChainId(), WalletAddress, SellCurrency, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Prices

Query swap prices for the token your user wants to receive.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-relayer_docs/6udOBi1aBhs72bAQ/images/unreal/get_swap_prices.png?fit=max&auto=format&n=6udOBi1aBhs72bAQ&q=85&s=a8021075a26baf5948a00ddd6da2e50d" width="2074" height="1104" data-path="images/unreal/get_swap_prices.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<TArray<FSeqSwapPrice>> OnApiSuccess = [this, OnSuccess](const TArray<FSeqSwapPrice>& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrices(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Quote

After checking the swap price, get your approval and transaction data needed to build your transaction.
Make sure you only define `Sell Amount` or `Buy Amount` and not both.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-relayer_docs/6udOBi1aBhs72bAQ/images/unreal/get_swap_quote.png?fit=max&auto=format&n=6udOBi1aBhs72bAQ&q=85&s=4698d2db86fdd70a8244ec42d76dc202" width="2182" height="1224" data-path="images/unreal/get_swap_quote.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapQuote> OnApiSuccess = [this, OnSuccess](const FSeqSwapQuote& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapQuote(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, SellCurrency, BuyAmount, SellAmount, IncludeApprove, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Chains

Returns the list of chains supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-relayer_docs/mAGiont-gk7dLIZB/images/unreal/supported_swap_chains.png?fit=max&auto=format&n=mAGiont-gk7dLIZB&q=85&s=dfc748ea97a92a8982e37de4b8eb14f1" width="1726" height="930" data-path="images/unreal/supported_swap_chains.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiChainsResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiChainsResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapChains(OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Tokens

Returns the list of tokens supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-relayer_docs/mAGiont-gk7dLIZB/images/unreal/supported_swap_tokens.png?fit=max&auto=format&n=mAGiont-gk7dLIZB&q=85&s=62c7a44e030cd161fa9e4a2b65e21ea5" width="1726" height="930" data-path="images/unreal/supported_swap_tokens.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiTokensResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiTokensResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapTokens(Args, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>
